<?php
    class ModCp_ProductController extends Main_Controller_Action
    {
        public function init()
        {
            $this->loadTemplates('mod');
            $db = Zend_Registry::get('db');
        }
        
        public function preDispatch()
		{
			$auth = Zend_Auth::getInstance();
			if((!$auth->hasIdentity()) || ($auth->getIdentity()->level != 1))
			{
				if($this->_request->getActionName() != 'login')
				{
					$this->_redirect('/mod-cp/index/login');
				}
			}
		}
		
		public function indexAction()
		{
			$this->view->headTitle('Quản lý tin voucher');
			$product = new ModCp_Model_Product();
			
			if($_POST['add'])
			{
				$this->_redirect('mod-cp/product/create');
			}
            if($_POST['addhot'])
            {
                $listId = $this->_request->getParam('check');
				$product->addHotProducts($listId);
				$this->_redirect('mod-cp/product');
            }
			if($_POST['refresh'])
			{
				$this->_redirect('mod-cp/product');
			}
			if($_POST['delete'])
			{
				$listId = $this->_request->getParam('check');
				$product->deleteProducts($listId);
				$this->_redirect('mod-cp/product');
			}
			
			$listProduct = $product->listProduct();
			$paginator = Zend_Paginator::factory($listProduct);
			$paginator->setItemCountPerPage(20);
			$paginator->setPageRange(5);
			$currentPage = $this->_request->getParam('page', 1);
			$paginator->setCurrentPageNumber($currentPage);
			
			$this->view->total = count($listProduct);
			$this->view->data = $paginator;
		}
		
		public function createAction()
		{
			$this->view->headTitle('Thêm tin voucher mới');
			$product = new ModCp_Model_Product();
            if($this->_request->isPost())
            {
                $filter = new Zend_Filter_StringTrim();
                $upload = new Zend_File_Transfer_Adapter_Http();
				$info = $upload->getFileInfo();                
				$product_image      = $upload->getFileName('product_image', false);
                $cat_id             = $this->_request->getParam('cat_id');
                $area_id            = $this->_request->getParam('area_id');
                $provider_id        = $this->_request->getParam('provider_id');
                $product_name       = $filter->filter($this->_request->getParam('product_name'));
                $sort_name          = $filter->filter($this->_request->getParam('sort_name'));
                $product_link       = $filter->filter($this->_request->getParam('product_link'));
                $original_price     = $filter->filter($this->_request->getParam('original_price'));
                $sales_price        = $filter->filter($this->_request->getParam('sales_price'));
                $expiry_day         = $this->_request->getParam('expiry_day');
                $expiry_time        = $this->_request->getParam('expiry_time');
                $hot                = $this->_request->getParam('hot');
                $product_advantages = $this->_request->getParam('product_advantages');
                $product_conditions = $this->_request->getParam('product_conditions');
                $product_content    = $this->_request->getParam('product_content');
                $advantages_plaintext = $this->_request->getParam('advantages_plaintext');
                $conditions_plaintext = $this->_request->getParam('conditions_plaintext');
                $content_plaintext = $this->_request->getParam('content_plaintext');
                $flag = true;
                
                $upload->addValidator('Size', false, 410000)
                       ->addValidator('Extension', false, 'jpg,jpeg,png,bmp,gif');
                if(!$upload->isValid())
				{
					$this->view->errorProductImage = 'Ảnh phải đúng định dạng (jpeg, jpg, bmp, png, gif) và dung lượng tối đa 400KB';
					$flag = false;
				}
                $validation = new ModCp_Form_ValidateProduct();
                if(!$validation->validProductImage($product_image))
				{
					$this->view->errorProductImage = 'Ảnh phải đúng định dạng (jpeg, jpg, bmp, png, gif) và dung lượng tối đa 400KB';
					$flag = false;
				}
                if($validation->validProductName($product_name))
                {
                    $this->view->productNameValue = $product_name;
                }
                else
				{
					$this->view->errorProductName = 'Tiêu đề tin voucher không được để trống và tối đa 300 kí tự';
					$flag = false;
				}
                if($validation->validSortName($sort_name))
                {
                    $this->view->sortNameValue = $sort_name;
                }
                else
                {
                    $this->view->errorSortName = 'Tiêu đề ngắn không được để trống và tối đa 100 kí tự';
                    $flag = false;
                }
                if($product->checkProduct($product_name) > 0)
                {
                    $this->view->errorProductName = 'Tiêu đề tin voucher này đã tồn tại';
					$flag = false;
                }
                if($validation->validProductLink($product_link))
                {
                    $this->view->productLinkValue = $product_link;
                }
                else
                {
                    $this->view->errorProductLink = 'Đường dẫn nguồn tin không được để trống';
                    $flag = false;
                }
                if($validation->validOriginalPrice($original_price))
                {
                    $this->view->originalPriceValue = $original_price;
                }
                else
                {
                    $this->view->errorOriginalPrice = 'Giá gốc chỉ được nhập số và độ dài từ 1-10 kí tự';
                    $flag = false;
                }
                if($validation->validSalesPrice($sales_price))
                {
                    $this->view->salesPriceValue = $sales_price;
                }
                else
                {
                    $this->view->errorSalesPrice = 'Giá ưu đãi chỉ được nhập số và độ dài từ 1-10 kí tự';
                    $flag = false;
                }
                if($validation->validExpiryDay($expiry_day))
                {
                    $this->view->expiryDayValue = $expiry_day;
                }
                else
                {
                    $this->view->errorExpiryDay = 'Ngày hết hạn phải đúng định dạng (Ngày-Tháng-Năm Giờ:Phút:Giây)';
                    $flag = false;
                }
                if($validation->validExpiryTime($expiry_time))
                {
                    $this->view->expiryTimeValue = $expiry_time;
                }
                else
                {
                    $this->view->errorExpiryDay = 'Ngày hết hạn phải đúng định dạng (Ngày-Tháng-Năm Giờ:Phút:Giây)';
                    $flag = false;
                }
                if($validation->validProductAdvantages($product_advantages))
                {
                    $this->view->advantagesValue = $product_advantages;
                }
                else
                {
                    $this->view->errorAdvantages = 'Ưu điểm sản phẩm không được để trống';
                    $flag = false;
                }
                if($validation->validProductConditions($product_conditions))
                {
                    $this->view->conditionsValue = $product_conditions;
                }
                else
                {
                    $this->view->errorConditions = 'Điều kiện sử dụng không được để trống';
                    $flag = false;
                }
                if($validation->validProductContent($product_content))
                {
                    $this->view->contentValue = $product_content;
                }
                else
                {
                    $this->view->errorContent = 'Chi tiết sản phẩm không được để trống';
                    $flag = false;
                }
                
                if($flag == true)
                {
                    preg_match('#\.([^\.]+)$#', $product_image, $matches);
					$fileExtension  = $matches[1];
					$newFileName = 'pic_' . time() . mt_rand(5, 99999999) . '.' . $fileExtension;
					$options = array('target' => BASE_PATH . '/public/files/product/' . $newFileName,'overwrite'=>true);
					$upload->addFilter('Rename',$options,'product_image');
					$upload->receive('product_image');
                    $expiry_day = $product->convertToMysql($expiry_day);
                    $expiry_day = $expiry_day . ' ' . $expiry_time;
                    $auth = Zend_Auth::getInstance();
        			$infoUser = $auth->getIdentity();
        			$user_id = $infoUser->user_id;
                    
                    $result = $product->addProduct($user_id, $cat_id, $area_id, $provider_id, $product_name, $sort_name, $newFileName, $product_advantages, $product_conditions, $product_content, $product_link, $original_price, $sales_price, $expiry_day, $hot, $advantages_plaintext, $conditions_plaintext, $content_plaintext);
                    $this->_redirect('mod-cp/product');
                }
            }
		}
        
        public function editAction()
        {
            $this->view->headTitle('Sửa thông tin voucher');
            $id = $this->_request->getParam('id');
            $product = new ModCp_Model_Product();
            $this->view->data = $product->getProductById($id);
            
            if($this->_request->isPost())
            {
                $filter = new Zend_Filter_StringTrim();
                $upload = new Zend_File_Transfer_Adapter_Http();
				$info = $upload->getFileInfo();
                
				$product_image      = $upload->getFileName('product_image', false);
                $cat_id             = $this->_request->getParam('cat_id');
                $area_id            = $this->_request->getParam('area_id');
                $provider_id        = $this->_request->getParam('provider_id');
                $product_name       = $filter->filter($this->_request->getParam('product_name'));
                $sort_name          = $filter->filter($this->_request->getParam('sort_name'));
                $product_link       = $filter->filter($this->_request->getParam('product_link'));
                $original_price     = $filter->filter($this->_request->getParam('original_price'));
                $sales_price        = $filter->filter($this->_request->getParam('sales_price'));
                $expiry_day         = $this->_request->getParam('expiry_day');
                $expiry_time        = $this->_request->getParam('expiry_time');
                $hot                = $this->_request->getParam('hot');
                $product_advantages = $this->_request->getParam('product_advantages');
                $product_conditions = $this->_request->getParam('product_conditions');
                $product_content    = $this->_request->getParam('product_content');
                $advantages_plaintext = $this->_request->getParam('advantages_plaintext');
                $conditions_plaintext = $this->_request->getParam('conditions_plaintext');
                $content_plaintext  = $this->_request->getParam('content_plaintext');
                $status             = $this->_request->getParam('status');
                $flag = true;
                
                $validation = new Mod_Form_ValidateProduct();
                if(!$validation->validProductName($product_name))
                {
                    $this->view->errorProductName = 'Tiêu đề không được để trống và tối đa 300 kí tự';
                    $flag = false;
                }
                if($this->view->data['product_name'] != $product_name)
                {
                    if($product->checkProduct($product_name, $id) > 0)
                    {
                        $this->view->errorProductName = 'Tiêu đề này đã tồn tại';
                        $flag = false;
                    }
                }
                if(!$validation->validSortName($sort_name))
                {
                    $this->view->errorSortName = 'Tiêu đề ngắn không được để trống và tối đa 100 kí tự';
                    $flag = false;
                }
                if(!$validation->validProductLink($product_link))
                {
                    $this->view->errorProductLink = 'Đường dẫn nguồn tin không được để trống';
                    $flag = false;
                }
                if(!$validation->validOriginalPrice($original_price))
                {
                    $this->view->errorOriginalPrice = 'Giá gốc chỉ được nhập số và độ dài từ 1-10 kí tự';
                    $flag = false;
                }
                if(!$validation->validSalesPrice($sales_price))
                {
                    $this->view->errorSalesPrice = 'Giá ưu đãi chỉ được nhập số và độ dài từ 1-10 kí tự';
                    $flag = false;
                }
                if(!$validation->validExpiryDay($expiry_day))
                {
                    $this->view->errorExpiryDay = 'Ngày hết hạn phải đúng định dạng (Ngày-Tháng-Năm Giờ:Phút:Giây)';
                    $flag = false;
                }
                if(!$validation->validExpiryTime($expiry_time))
                {
                    $this->view->errorExpiryDay = 'Ngày hết hạn phải đúng định dạng (Ngày-Tháng-Năm Giờ:Phút:Giây)';
                    $flag = false;
                }
                if(!$validation->validProductAdvantages($product_advantages))
                {
                    $this->view->errorAdvantages = 'Ưu điểm sản phẩm không được để trống';
                    $flag = false;
                }
                if(!$validation->validProductConditions($product_conditions))
                {
                    $this->view->errorConditions = 'Điều kiện sử dụng không được để trống';
                    $flag = false;
                }
                if(!$validation->validProductContent($product_content))
                {
                    $this->view->errorContent = 'Chi tiết sản phẩm không được để trống';
                    $flag = false;
                }
                
                if($flag == true)
                {
                    $expiry_day = $product->convertToMysql($expiry_day);
                    $expiry_day = $expiry_day . ' ' . $expiry_time;
                    if(!$validation->validProductImage($product_image))
                    {
                        $result = $product->editProduct($id, $cat_id, $area_id, $provider_id, $product_name, $sort_name, '', $product_advantages, $product_conditions, $product_content, $product_link, $original_price, $sales_price, $expiry_day, $hot, $advantages_plaintext, $conditions_plaintext, $content_plaintext, $status);
                        $this->view->error = 'Đã sửa thành công';
                        $this->view->data = $product->getProductById($id);
                    }
                    else
                    {
                        $upload->addValidator('Size', false, 410000)
                               ->addValidator('Extension', false, 'jpg,jpeg,png,bmp,gif');
                        if(!$upload->isValid())
        				{
        					$this->view->errorProductImage = 'Ảnh phải đúng định dạng (jpeg, jpg, bmp, png, gif) và dung lượng tối đa 400KB';
        					$flag = false;
        				}
                        if($flag == true)
                        {
                            preg_match('#\.([^\.]+)$#', $product_image, $matches);
    						$fileExtension  = $matches[1];
    						$newFileName = 'pic_' . time() . mt_rand(5, 99999999) . '.' . $fileExtension;
    						
    						$options = array('target' => BASE_PATH . '/public/files/product/' . $newFileName,'overwrite'=>true);
    						$upload->addFilter('Rename',$options,'product_image');
    						$upload->receive('product_image');
    						
    						$result = $product->editProduct($id, $cat_id, $area_id, $provider_id, $product_name, $sort_name, $newFileName, $product_advantages, $product_conditions, $product_content, $product_link, $original_price, $sales_price, $expiry_day, $hot, $advantages_plaintext, $conditions_plaintext, $content_plaintext, $status);
   							if (is_file(PUBLIC_PATH . '/files/product/' . $this->view->data['product_image']))
   							{
  								unlink(PUBLIC_PATH . '/files/product/' . $this->view->data['product_image']);
   							}
   							$this->view->error = 'Đã sửa thành công';
                            $this->view->data = $product->getProductById($id);
                        }
                    }
                }
            }
        }
        
        public function deleteAction()
        {
            $id = $this->_request->getParam('id');
            $product = new ModCp_Model_Product();
            $result = $product->deleteProduct($id);
            $this->_redirect('mod-cp/product');
        }
        
        public function searchAction()
        {
            $this->view->headTitle('Tìm kiếm tin voucher');
            $filter = new Zend_Filter_StringTrim();
			$keyword = $filter->filter($this->_request->getParam('keyword'));
            $this->view->searchValue = $keyword;
            $product = new ModCp_Model_Product();
            $flag = true;
            
			if($this->_request->isPost())
            {
                $validation = new ModCp_Form_ValidateProduct();
                if($validation->validSearch($keyword))
				{
					$this->view->searchValue = $keyword;
				}
				else
				{
					$this->view->errorSearch = 'Bạn chưa nhập từ khóa';
					$result = $product->searchProduct($keyword);
					$paginator = Zend_Paginator::factory($result);
					$paginator->setItemCountPerPage(20);
					$paginator->setPageRange(5);
					$currentPage = $this->_request->getParam('page', 1);
					$paginator->setCurrentPageNumber($currentPage);
						
					$this->view->total = count($result);
					$this->view->data = $paginator;
					$flag = false;
				}

				if($flag == true)
				{
					$result = $product->searchProduct($keyword);
					$paginator = Zend_Paginator::factory($result);
					$paginator->setItemCountPerPage(20);
					$paginator->setPageRange(5);
					$currentPage = $this->_request->getParam('page', 1);
					$paginator->setCurrentPageNumber($currentPage);
						
					$this->view->total = count($result);
					$this->view->data = $paginator;
				}
            }
			
			if($_POST['add'])
			{
				$this->_redirect('mod-cp/product/create');
			}
            if($_POST['addhot'])
            {
                $listId = $this->_request->getParam('check');
				$product->addHotProducts($listId);
				$this->_redirect('mod-cp/product');
            }
			if($_POST['refresh'])
			{
				$this->_redirect('mod-cp/product');
			}
			if($_POST['delete'])
			{
				$listId = $this->_request->getParam('check');
				$product->deleteProducts($listId);
				$this->_redirect('mod-cp/product');
			}
            
            $validation = new ModCp_Form_ValidateProduct();
            if($validation->validSearch($keyword))
            {
                $this->view->searchValue = $keyword;
            }
            else
            {
                $this->view->errorSearch = 'Bạn chưa nhập từ khóa';
				$result = $product->searchProduct($keyword);
				$paginator = Zend_Paginator::factory($result);
				$paginator->setItemCountPerPage(20);
				$paginator->setPageRange(5);
				$currentPage = $this->_request->getParam('page', 1);
				$paginator->setCurrentPageNumber($currentPage);
						
				$this->view->total = count($result);
				$this->view->data = $paginator;
				$flag = false;
            }
            
            if($flag == true)
            {
                $result = $product->searchProduct($keyword);
				$paginator = Zend_Paginator::factory($result);
				$paginator->setItemCountPerPage(20);
				$paginator->setPageRange(5);
				$currentPage = $this->_request->getParam('page', 1);
				$paginator->setCurrentPageNumber($currentPage);
						
				$this->view->total = count($result);
				$this->view->data = $paginator;
            }
        }
    }
